|  |  | @@ -331,12 +331,14 @@ def wx_notify_url_api(request): | 
            
            
              | 331 | 331 |      return HttpResponse(settings.WXPAY_NOTIFY_SUCCESS) | 
            
            
              | 332 | 332 |   | 
            
            
              | 333 | 333 |   | 
            
            
              |  | 334 | +@logit | 
            
            
              |  | 335 | +@transaction.atomic | 
            
            
              | 334 | 336 |  def wx_balance_withdraw_api(request): | 
            
            
              | 335 | 337 |      user_id = request.POST.get('user_id', '') | 
            
            
              | 336 | 338 |   | 
            
            
              | 337 | 339 |      # 用户校验 | 
            
            
              | 338 | 340 |      try: | 
            
            
              | 339 |  | -        user = UserInfo.objects.get(user_id=user_id) | 
            
            
              |  | 341 | +        user = UserInfo.objects.select_for_update().get(user_id=user_id) | 
            
            
              | 340 | 342 |      except UserInfo.DoesNotExist: | 
            
            
              | 341 | 343 |          return response(UserStatusCode.USER_NOT_FOUND) | 
            
            
              | 342 | 344 |   | 
            
            
            
            
              |  |  | @@ -358,9 +360,9 @@ def wx_balance_withdraw_api(request): | 
            
            
              | 358 | 360 |      wxpay = WeChatPay(wechat.get('appID'), wechat.get('apiKey'), wechat.get('mchID'), mch_cert=wechat.get('mch_cert'), mch_key=wechat.get('mch_key')) | 
            
            
              | 359 | 361 |   | 
            
            
              | 360 | 362 |      if withdraw_type == 'TRANSFER': | 
            
            
              | 361 |  | -        wxpay.transfer.transfer(user.wx_uid, amount, u'摄影师余额提现,企业付款', check_name='NO_CHECK') | 
            
            
              |  | 363 | +        ret_data = wxpay.transfer.transfer(user.wx_uid, amount, u'摄影师余额提现,企业付款', check_name='NO_CHECK') | 
            
            
              | 362 | 364 |      elif withdraw_type == 'PACKET': | 
            
            
              | 363 |  | -        wxpay.redpack.send( | 
            
            
              |  | 365 | +        ret_data = wxpay.redpack.send( | 
            
            
              | 364 | 366 |              user.wx_uid, | 
            
            
              | 365 | 367 |              amount, | 
            
            
              | 366 | 368 |              send_name=wechat.get('redpacket', {}).get('SEND_NAME'), | 
            
            
            
            
              |  |  | @@ -370,4 +372,8 @@ def wx_balance_withdraw_api(request): | 
            
            
              | 370 | 372 |              remark=wechat.get('redpacket', {}).get('REMARK'), | 
            
            
              | 371 | 373 |          ) | 
            
            
              | 372 | 374 |   | 
            
            
              |  | 375 | +    # 根据 ret_data 判断是否提现成功, 成功则减余额, 失败则提示 | 
            
            
              |  | 376 | +    user.balance -= amount | 
            
            
              |  | 377 | +    user.save() | 
            
            
              |  | 378 | + | 
            
            
              | 373 | 379 |      return response(200, 'Withdraw Success', u'提现成功', {}) |